package pe.com.bbva.modpre.persistencia.hibernate;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.bbva.modpre.dominio.MedioPago;
import pe.com.bbva.modpre.persistencia.MedioPagoDAO;
import pe.com.bbva.modpre.ui.ModpreApplication;

@Repository
@SuppressWarnings("serial")
public class MedioPagoHibernate extends BaseHibernate<MedioPago, Long> 
implements MedioPagoDAO {
	Logger logger = LogManager.getLogger(ModpreApplication.class.getName());
	@Autowired
	DataSource dataSource;
	
	@Autowired
	public MedioPagoHibernate(SessionFactory sessionFactory){
		setSessionFactory(sessionFactory);
	}

	@Override
	public MedioPago obtenerMedioPagoxCodigoCentral(String codigoCentral) {
		return obtenerHql("select m from MedioPago m where codigoCentral=?", codigoCentral);
	}

	@Override
	public String ejecutarProcedureMpago(String nombre) {
		Connection conn=null;
		CallableStatement cStmt =null;
		String error=""; 
		try {
			conn = dataSource.getConnection();
			cStmt = conn.prepareCall("{call MODPRE.PK_CARGA_ARCHIVO.SP_CARGAR_MEDIO_PAGO(?,?)}");
			cStmt.setString(1, nombre);
			cStmt.registerOutParameter(2, java.sql.Types.VARCHAR);
			cStmt.execute();
			error = cStmt.getString(2);
		} catch (SQLException e1) {
			error="Modpre SP_CARGAR_MEDIO_PAGO "+e1;
		}finally{
			if(cStmt!=null){
				try {
					cStmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(conn!=null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
		if(StringUtils.isNotBlank(error)){
			logger.info(error);
		}
		return error;
	}
}
